﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CasaBella.Entities;
using System.Data.Objects;
using System.Data;

namespace CasaBella.Repository
{
    public class ProveedorRepository:MasterRepository,IProveedorRepository
    {
        public List<PROVEEDOR> GetAllFromProveedor()
        {
            var query = from c in context.PROVEEDORs
                        select c;
            return query.ToList();
        }

        public List<PROVEEDOR> GetAllFromProveedorByCriterio(string criterio)
        {
            var query = from e in context.PROVEEDORs
                        select e;
            if (criterio != null && criterio != string.Empty && criterio != "")
            {
                query = from e in context.PROVEEDORs
                        where e.Ruc.Contains(criterio) ||
                                   e.RazonSocial.ToUpper().Contains(criterio) ||
                                   e.Direccion.ToUpper().Contains(criterio) ||
                                   e.Email.ToUpper().Contains(criterio)
                        select e;
            }
            return query.ToList();
        }

        public PROVEEDOR GetAllFromProveedorByRuc(string ruc)
        {
            var query = from c in context.PROVEEDORs
                        where c.Ruc.CompareTo(ruc) == 0
                        select c;
            return query.SingleOrDefault();
        }

        public void AddProveedor(PROVEEDOR proveedor)
        {
            //guardando TELEFONOS DEL PROVEEDOR
            foreach (var item in proveedor.TELEFONOS_PROVEEDOR)
            {
                item.OPERADOR = null;
                context.Entry(item).State = EntityState.Added;
            }

            context.PROVEEDORs.Add(proveedor);
            context.SaveChanges();
        }

        public void UpdateProveedor(PROVEEDOR proveedor)
        {
            var proveedorDB=(from c in context.PROVEEDORs
                                 where c.Id.Equals(proveedor.Id)
                                 select c).SingleOrDefault();

            proveedorDB.Direccion = proveedor.Direccion;
            proveedorDB.Email = proveedor.Email;
            proveedorDB.RazonSocial = proveedor.RazonSocial;
            proveedorDB.Ruc = proveedor.Ruc;
            
            //editando los TELEFONOS DEL PROVEEDOR
            foreach (var item in proveedor.TELEFONOS_PROVEEDOR)
            {
                item.OPERADOR = null;
                item.PROVEEDOR = null;
                if (item.Id.Equals(0))
                {
                    item.PROVEEDOR = proveedorDB;
                    item.OPERADOR = context.OPERADORs.Find(item.IdOperador);
                    context.Entry(item).State = EntityState.Added;
                    proveedorDB.TELEFONOS_PROVEEDOR.Add(item);
                }
                else
                {
                    context.TELEFONOS_PROVEEDOR.Attach(item);
                    context.Entry(item).State = System.Data.EntityState.Modified;
                }
            }

            context.Entry(proveedorDB).State = System.Data.EntityState.Modified;
            context.SaveChanges();
        }
    }
}
